<html>
<head>
  <title>ActivityPub and MediaGoblin at TPAC 2016 (or: ActivityPub needs your review!)</title>
  <meta name="date" contents="2016-10-05 11:45" />
  <meta name="author" contents="Christopher Allan Webber" />
  <meta name="tags" contents="activitypub, standards, w3c, tpac" />
</head>
<body>

<p class="centered">
  <a href="https://www.w3.org/TR/activitypub/">
    <img src="/blog_images/activitypub_wd_2016-09-04.png"
         alt="Screenshot of ActivityPub Working Draft" />
  </a>
</p>

<p>
  Hello everyone!
  We have a lot of news to cover, but I'm going to jump right into the
  thick of it: we've been working hard on a new federation (as well as
  client to server) standard called
  <a href="https://www.w3.org/TR/activitypub/">ActivityPub</a>
  (formerly ActivityPump).
  We've made tremendous progress, and I was just recently at a face to
  face meeting at <a href="https://www.w3.org/2016/09/TPAC/">TPAC</a>,
  the W3C's big technical conference.
</p>

<p>
  The good news: ActivityPub is aiming to hit Candidate Recommendation
  status by October 11th.
  (That's less than a week away!)
  However, in order to enter that stage, we need <i>your review!</i>
  If you have any interest in the decentralized web, you can help.
  All you have to do is
  <a href="https://w3c.github.io/activitypub/">read the latest editor's</a>
  draft and provide feedback.
  (The earlier the better... maybe a fun weekend project?)
  You can do this by any of the following:
</p>

<ul>
  <li>
    Post
    <a href="https://github.com/w3c-social/activitypub/issues">issues on the issue tracker</a>
    (yes, I think it's ironic and problematic that we're using GitHub,
    I picked my battles here, whether right or wrong).
  </li>
  <li>
    Email the
    <a href="http://lists.w3.org/Archives/Public/public-socialweb-comments/">social working group comments</a>
    mailing list.
  </li>
  <li>
    You can email me directly.
    Email cwebber AT dustycloud DOT org, and include "ActivityPub" in
    the subject.
    Note that I will be publishing your comments publicly, probably
    on the Social Working Group wiki!
  </li>
</ul>

<p>
  If you have feedback, we want to hear it!
  (From anyone, but <i>especially</i> from those who are interested in
  implementing ActivityPub!)
  Thank you!
</p>

<h2>ActivityPub live</h2>

<p><i>
  Note, the rest of this post is a bit of a dive into behind the scenes
  decisions and activity in MediaGoblin and ActivityPub... there's no need to
  read this part to submit a review!
</i></p>

<p>
  I'm kind of traveling through time in all the wrong order in this post...
  but it's worth jumping forward a bit to see the results of what we've done.
  Over the last many months there's been a huge push on ActivityPub as a
  standard, as we'll talk about.
  But in order to succeed, I also needed implementations, both of client to
  server and server to server.
  Well, I'm happy to say that those did come together...
</p>

<p class="blog_image">
  <a href="/blog_images/pubstrate-2016-09-14.png">
    <img src="/blog_images/pubstrate-2016-09-14-scaled.png"
         alt="Pubstrate in action!" /></a>
</p>

<p>
  This is <a href="https://gitlab.com/dustyweb/pubstrate">Pubstrate</a>,
  an implementation of ActivityStreams and ActivityPub for
  <a href="https://www.gnu.org/software/guile/">GNU Guile</a>.
  Sorry for the sappy embedded love-note, though what's nice about this
  is that it's the first demo I gave to someone else of the client to
  server functionality working in Pubstrate.
  But wait, what was the client?
</p>

<p class="blog_image">
  <a href="/blog_images/soci-el-2016-09-14.png">
    <img src="/blog_images/soci-el-2016-09-14-scaled.png"
         alt="Soci-El in action!" /></a>
</p>

<p>
  This is <a href="https://gitlab.com/dustyweb/soci-el">soci-el</a>,
  an ActivityPub client written in... you guessed it... emacs lisp.
  You can see the rendering of the user's outbox here as well as the
  buffers from which the message was composed.
</p>

<p>
  Pretty nerdy!
  I don't expect everyone to be using emacs as an ActivityPub client of
  course... I hope to see various desktop, web, and mobile clients
  made available.
  But, Emacs is the most fun for me, and I was time pressed, so
  there we are.
</p>

<p>
  Everyone loves seeing screenshots, but maybe not all of this stuff
  makes sense without context.
  What does this mean for MediaGoblin?
</p>

<h2>So what's been going on?</h2>

<!-- - So what's been going on?
     Talk about despite an appearance of absence, I've been working furiously...
   -->

<p>
  It seems a recurring meme in MediaGoblin land to say "we've been quiet, because
  we've been busy" (or maybe historically on every tech blog ever), but I guess
  I can't resist repeating the mantra.
  It's true!
  Though the weight of my focus has been shifted from where I expected it to be.
  From the
  <a href="http://mediagoblin.org/news/mediagoblin-0.9.0-three-goblineers.html">last</a>
  <a href="http://mediagoblin.org/news/stripe-retreat-state-of-the-goblin.html">few</a>
  <a href="http://mediagoblin.org/news/state-of-the-goblin-september-2015.html">updates</a>
  over the last year, you would be right to anticipate that the main thing I would
  be working on would be merging the
  <a href="http://mediagoblin.org/news/state-of-federation.html">federation code Jessica
    has written</a>
  and getting 1.0 out the door.
  That was the plan, and we're still working towards that, but
  priorities shifted as we realized the opportunities and time
  pressures we were under with ActivityPub.
  After the Social Working Group
  <a href="https://www.w3.org/wiki/Socialwg/2016-06-06">face to face meeting in June</a>,
  Jessica and I sat down and talked about what we should do.
  Jessica had recently started working at
  <a href="https://www.igalia.com/">Igalia</a> (great people!) and
  was busy with that and other transitions in her life, so we discussed
  whether we thought it was most sensible to focus my energy on MediaGoblin
  or on ActivityPub.
  It was clear that ActivityPub was shaping into a solid specification,
  but it was also made clear that the Social Working Group's charter was
  running out by the end of 2016.
  We both think ActivityPub is key to MediaGoblin's success and didn't want
  to see our invested time go to waste, so decided my immediate focus
  should switch to ActivityPub so it could successfully make it as
  a standard.
</p>

<p>
  Which isn't doom and gloom for MediaGoblin!
  MediaGoblin development has continued... the community is good enough that
  people have been able to work while I've been busy.
  I'm happy to say we also appointed longtime contributor Boris Bobrov as
  co-maintainer to help reduce me being a bottleneck.
  (Thank you Boris, and congrats!)
  Other contributors have also stepped up to the plate.
  I'm especially thankful of Ben Sturmfels for hosting MediaGoblin hackathons
  and being so responsive to community members.
  (And of course, there are many others to thank, too!)
</p>

<!--   + I realized I was going to have to go head down... so I spent my effort on 
     ActivityPub, and ActivityPub implementations...
   -->
<p>
  Anyway, I'm not going anywhere, I've just been shifting focus to standards
  work for a bit... but it's all for the greater good of MediaGoblin.
  (Well, and the greater federated social web!)
  Soon, we'll be putting the work we're doing on ActivityPub directly
  into MediaGoblin.
  When we merge Jessica's work on federation, we will also retool it so that
  the first federated release of MediaGoblin will be blazing the trails with
  ActivityPub.
</p>  

<!--   + Amy visiting... -->

<!-- TODO: Amy photo here -->

<p>
  Both ActivityPub and I personally got a significant boost by a happy visit
  from friend and Social Working Group co-conspirator Amy Guy.
  Amy dropped by for an intense four days of standards hacking and scheming,
  and came up with several significant ways to restructure and improve the
  document.
  With her help, we now have much clearer distinction between the use of
  ActivityPub as a client to server protocol (think mobile applications and
  desktop applications connecting to your server) vs the server to server
  protocol (federation).
  Both of these are now clearly intertwined in the document, but are distinct
  enough where they can be used and understood separately if desired.
  We also more clearly established the connections between ActivityPub and
  the linked data community by explaining ActivityPub's relationship with
  <a href="https://www.w3.org/TR/ldn/">Linked Data Notifications</a>.
</p>

<p>
  Amy has a gift for composing standards language, something I'm still
  struggling to learn (but hopefully getting better with over time).
  ActivityPub is much better with her hard work.
  Thank you Amy!
</p>

<!--   + hopefully I could get them ready in time for... -->

<p>
  In addition to the standards side of things, in order to get ActivityPub to
  the next level, we needed to be able to present real live demonstrations
  of the standard in action.
  Hence the work on Pubstrate and soci-el mentioned previously.
  For most of the months before TPAC, I was working furiously day and night
  to get things ready to show...
  And then, it was time to head off, and hope it was good enough...
</p>

<!-- - TPAC! -->
<h2>TPAC</h2>

<p class="blog_image">
  <a href="https://www.w3.org/wiki/File:2016-09-21-socialwg-breakout.jpg">
    <img src="/blog_images/2016-09-21-socialwg-breakout-by-aaronpk-scaled.jpg"
         alt="Live demo image, by aaronpk" />
  </a>
  <br/>
  <em>
    TPAC demo room photo by
    <a href="https://aaronparecki.com/">Aaron Parecki</a>
  </em>    
</p>

<p>
  Fortunately, all that hard work paid off.
  The Social Working Group kicked off TPAC with live open-viewing
  demonstrations of the various standards we've been working on.
  We got in a really solid set of demos from everyone in the
  group.
</p>

<!--   + Giving live demos -->

<p>
  From my end, I managed to demo all the core parts of the ActivityPub
  spec: I wrote a note in my client (soci-el), fired it off to the server
  (Pubstrate), where it rendered successfully.
  Then I explained, well, what if you want someone on another machine to
  see it?
  So I had another user on a separate Pubstrate instance, added
  the user over there to the recipients list on my message, shot
  the message over to the server, crossed my fingers and hey!
  The live demo of federation succeeded.
  (Whew!)
</p>

<!--   + State of the specs post-meeting -->

<p>
  In the actual main Social Working Group meeting, we hammered things
  forward pretty nicely.
  As said, ActivityPub was positioned to move ahead towards
  Candidate Recommendation by the 11th.
  Again, your feedback is most valuable at this time!
</p>

<!--   + One more thing: at Amy Guy's suggestion, I showed off the
         MediaGoblin campaign video -->

<p class="blog_image">
  <a href="/pages/campaign.html">
    <img src="/images/campaign/video2_poster-surveillance.png"
         alt="Spying image from the campaign video" /></a>
</p>

<p>
  Oh, one more thing.
  On the second day of the main Social Working Group meetings,
  at Amy's suggestion (apparently she was impressed when I showed her
  at her visit), I showed off the MediaGoblin campaign video to
  the group.
  Apparently I had never done so previously, so it was really nice
  to hear the reaction: "Holy cow, this is describing exactly the
  type of stuff we're working on in the working group!"
  Yep, exactly... all that stuff you see illustrated in that video,
  we're working on putting into code and standards.
  The dream lives!
</p>

<p>
  So, all this Social Working Group stuff... things are happening!
  We're not just goofing off!
</p>

<p class="blog_image">
  <a href="https://www.w3.org/wiki/File:2016-09-23-socialwg-group-animated.gif">
    <img src="/blog_images/2016-09-23-socialwg-group-animated-by-aaronpk.gif"
         alt="TPAC 2016-09-23 goofoff gif by aaronpk" />
  </a>
  <br/>
  <em>
    Super serious TPAC group "photo" by
    <a href="https://aaronparecki.com/">Aaron Parecki</a>
  </em>
</p>

<p>
  ... er, right.
  Not <em>just</em> goofing off! :)
</p>

</body>
</html>
